多态是一种运行期的行为,它有以下几个特点:

    看一个实现了多态的代码例子:

    然后,又定义了 2 个结构体,StudentProgrammer,同时,类型 *StudentProgrammer 实现了 Person 接口定义的两个函数。注意,*Student 类型实现了接口, 类型却没有。

    之后,我又定义了函数参数是 Person 接口的两个函数:

    更深入一点来说的话,在函数 或者 growUp() 内部,接口 person 绑定了实体类型 *Student 或者 Programmer。根据前面分析的 iface 源码,这里会直接调用 fun 里保存的函数,类似于: s.tab->fun[0],而因为 数组里保存的是实体类型实现的函数,所以当函数传入不同的实体类型时,调用的实际上是不同的函数实现,从而实现多态。

    运行一下代码:

    参考资料

    【多态与鸭子类型】https://www.jb51.net/article/116025.htm